#include "Comm.hpp" // 包含共享内存相关的公共函数
#include "Fifo.hpp" // 包含管道通信相关的类
#include <unistd.h> // 包含POSIX标准函数，如sleep

int main()
{
    key_t key = GetShmKeyOrDie();                   // 获取共享内存的键值
    std::cout << "key:" << ToHex(key) << std::endl; // 打印键值
    sleep(2);                                       // 暂停2秒

    int shmid = CreateShm(key, defaultsize);     // 创建共享内存
    std::cout << "shmid " << shmid << std::endl; // 打印共享内存ID
    sleep(2);                                    // 暂停2秒

    ShmDebug(shmid); // 调试共享内存

    char *addr = (char *)ShmAttach(shmid);                                         // 附加共享内存
    std::cout << "Attach shm success,addr:" << ToHex((uint64_t)addr) << std::endl; // 打印附加的地址
    sleep(2);

    Fifo fifo;
    Sync syn;
    syn.OpenReadOrDie(); // 打开管道进行读取
    for (;;)
    {
        if (!syn.Wait()) // 等待管道数据
        {
            std::cout << "Wait error" << std::endl; // 如果等待出错，打印错误信息
            break;
        }
        cout << "shm content: " << addr << endl; // 打印共享内存内容
    }
    ShmDetach(addr);                                                                // 分离共享内存
    std::cout << "Detach shm success,addr: " << ToHex((uint64_t)addr) << std::endl; // 打印分离的地址

    DeleteShm(shmid); // 删除共享内存
    return 0;
}